package LimitedTimeGame.Day_0216;

/**
 * @author zxc
 * @date 2023/02/16 10:15
 **/

import java.util.Stack;

/**
 * 题目 ：从头到尾打印链表
 * 题目详述 ：
 * 输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。
 *
 * 限制：
 * 0 <= 链表长度 <= 10000
 *
 */
public class ReversePrint {
    /**
     * 思路 ：
     * 1.翻转链表，
     * （1）即，使用栈来存储链表节点;
     * （2）栈中弹出链表节点，来实现反转链表
     * ===> 空间换时间方法
     * ===》导致了 超出内存限制的问题;
     *
     * @param head
     * @return
     */
    public int[] reversePrint(ListNode head) {
        Stack<Integer> stack = new Stack<>();
        while (head != null){
            stack.push(head.val);
            head = head.next;
        }
        int[] result = new int[stack.size()];
        int i = 0;
        while(!stack.isEmpty()){
            result[i++] = stack.pop();
        }
        return result;
    }
    public class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
    }
}
